/*
    TiMidity++ -- MIDI to WAVE converter and player
    Copyright (C) 1999-2002 Masanao Izumo <mo@goice.co.jp>
    Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

    The 8-bit uLaw to 16-bit PCM and the 13-bit-PCM to 8-bit uLaw
    tables were lifted from the rsynth-2.0 sources.  The README says:

 >
 > This is a text to speech system produced by integrating various pieces
 > of code and tables of data, which are all (I believe) in the public domain.
 >
 > The bulk of the intergration was done by myself, that is Nick Ing-Simmons.
 > I can be reached via my employer at nik@tiuk.ti.com.
 >

*/

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif /* HAVE_CONFIG_H */
#include <stdio.h>
#include <math.h>
#include "timidity.h"
#include "common.h"
#include "tables.h"

int32 freq_table[128]=
{
 8176, 8662, 9177, 9723,
 10301, 10913, 11562, 12250,
 12978, 13750, 14568, 15434,

 16352, 17324, 18354, 19445,
 20602, 21827, 23125, 24500,
 25957, 27500, 29135, 30868,

 32703, 34648, 36708, 38891,
 41203, 43654, 46249, 48999,
 51913, 55000, 58270, 61735,

 65406, 69296, 73416, 77782,
 82407, 87307, 92499, 97999,
 103826, 110000, 116541, 123471,

 130813, 138591, 146832, 155563,
 164814, 174614, 184997, 195998,
 207652, 220000, 233082, 246942,

 261626, 277183, 293665, 311127,
 329628, 349228, 369994, 391995,
 415305, 440000, 466164, 493883,

 523251, 554365, 587330, 622254,
 659255, 698456, 739989, 783991,
 830609, 880000, 932328, 987767,

 1046502, 1108731, 1174659, 1244508,
 1318510, 1396913, 1479978, 1567982,
 1661219, 1760000, 1864655, 1975533,

 2093005, 2217461, 2349318, 2489016,
 2637020, 2793826, 2959955, 3135963,
 3322438, 3520000, 3729310, 3951066,

 4186009, 4434922, 4698636, 4978032,
 5274041, 5587652, 5919911, 6271927,
 6644875, 7040000, 7458620, 7902133,

 8372018, 8869844, 9397273, 9956063,
 10548082, 11175303, 11839822, 12543854
};

int32 freq_table2[24][128];

void init_freq_table2(void)
{
	int i, j, k, l;
	double f;
	static double major_ratio[] = {
		 1.0 /  1, 16.0 / 15, 9.0 / 8, 6.0 / 5, 5.0 / 4,  4.0 / 3,
		17.0 / 12,  3.0 /  2, 8.0 / 5, 5.0 / 3, 9.0 / 5, 15.0 / 8
	};
	static double minor_ratio[] = {
		 1.0 /  1, 16.0 / 15, 10.0 /  9, 6.0 / 5, 5.0 / 4,  4.0 / 3,
		17.0 / 12,  3.0 /  2, 25.0 / 16, 5.0 / 3, 9.0 / 5, 15.0 / 8
	};
	
	for (i = 0; i < 12; i++)
		for (j = -1; j < 11; j++) {
			f = 440 * pow(2.0, (i - 9) / 12.0 + j - 5);
			for (k = 0; k < 12; k++) {
				l = i + j * 12 + k;
				if (l < 0 || l >= 128)
					continue;
				freq_table2[i][l] = f * major_ratio[k] * 1000 + 0.5;
				freq_table2[i + 12][l] = f * minor_ratio[k] * 1000 + 0.5;
			}
		}
}

/* v=2.^((x/127-1) * 6) */
FLOAT_T def_vol_table[128] =
{
 0.015625, 0.016145143728351113, 0.016682602624583379, 0.017237953096759438,
 0.017811790741104401, 0.01840473098076444, 0.019017409725829021, 0.019650484055324921,
 0.020304632921913132, 0.020980557880044631, 0.021678983838355849, 0.02240065983711079,
 0.023146359851523596, 0.023916883621822989, 0.024713057510949051, 0.025535735390801884,
 0.026385799557992876, 0.027264161680080529, 0.028171763773305786, 0.029109579212875332,
 0.030078613776876421, 0.031079906724942836, 0.032114531912828696, 0.033183598944085631,
 0.034288254360078256, 0.035429682869614412, 0.036609108619508737, 0.037827796507442342,
 0.039087053538526394, 0.040388230227024875, 0.041732722044739302, 0.043121970917609151,
 0.044557466772132896, 0.046040749133268132, 0.047573408775524545, 0.049157089429020417,
 0.050793489542332405, 0.05248436410402918, 0.054231526524842463, 0.056036850582493913,
 0.057902272431264008, 0.059829792678457581, 0.061821478529993396, 0.063879466007418645,
 0.066005962238725971, 0.068203247825430205, 0.070473679288442961, 0.072819691595368496,
 0.075243800771931268, 0.077748606600335793, 0.080336795407452768, 0.083011142945821612,
 0.085774517370559328, 0.088629882315368294, 0.091580300070941839, 0.094628934869176312,
 0.097779056276712184, 0.10103404270144323, 0.1043973850157546, 0.1078726903003755,
 0.11146368571286204, 0.11517422248485852, 0.11900828005242428, 0.12296997032385605,
 0.12706354208958254, 0.13129338557886089, 0.13566403716816194, 0.14018018424629392,
 0.14484667024148207, 0.14966849981579558, 0.15465084423249356, 0.15979904690204472,
 0.16511862911277009, 0.17061529595225433, 0.17629494242587571, 0.18216365977901747,
 0.18822774202974024, 0.19449369271892172, 0.20096823188510385, 0.20765830327152621,
 0.21457108177307616, 0.22171398113114205, 0.2290946618846218, 0.23672103958561411,
 0.2446012932886038, 0.25274387432224471, 0.26115751535314891, 0.26985123975140174,
 0.27883437126784744, 0.28811654403352405, 0.29770771289197112, 0.30761816407549192,
 0.31785852623682015, 0.32843978184802081, 0.33937327897885317, 0.3506707434672246,
 0.36234429149478936, 0.37440644258117928, 0.38687013301080181, 0.39974872970660535,
 0.41305604456569134, 0.42680634927214656, 0.44101439060298442, 0.45569540624360722,
 0.47086514112975281, 0.48653986433345225, 0.50273638651110641, 0.51947207793239625,
 0.53676488710936021, 0.55463336004561792, 0.57309666012638816, 0.59217458867062556,
 0.61188760616732485, 0.63225685421876243, 0.65330417821421161, 0.67505215075844849,
 0.69752409588017272, 0.72074411404630734, 0.74473710800900605, 0.76952880951308478,
 0.79514580689252357, 0.82161557358563286, 0.84896649759946774, 0.87722791195508854,
 0.90643012614631979, 0.93660445864574493, 0.96778327049280244, 1.0
};

/* v=2.^((x/127-1) * 8) */
FLOAT_T gs_vol_table[128] =
{
    0.0039062500000000, 0.0040805861773930, 0.0042627029890894,
    0.0044529476852761, 0.0046516830139370, 0.0048592879125210,
    0.0050761582304783, 0.0053027074840446, 0.0055393676447105,
    0.0057865899628809, 0.0060448458282938, 0.0063146276688402,
    0.0065964498894982, 0.0068908498531716, 0.0071983889053037,
    0.0075196534442191, 0.0078552560392360, 0.0082058365986788,
    0.0085720635900196, 0.0089546353144748, 0.0093542812384872,
    0.0097717633846316, 0.0102078777845971, 0.0106634559970159,
    0.0111393666930332, 0.0116365173126407, 0.0121558557949326,
    0.0126983723855831, 0.0132651015249917, 0.0138571238206964,
    0.0144755681078160, 0.0151216136014500, 0.0157964921451403,
    0.0165014905596815, 0.0172379530967594, 0.0180072840020952,
    0.0188109501929828, 0.0196504840553249, 0.0205274863655013,
    0.0214436293426398, 0.0224006598371108, 0.0234004026613237,
    0.0244447640691781, 0.0255357353908019, 0.0266753968295092,
    0.0278659214282155, 0.0291095792128753, 0.0304087415208408,
    0.0317658855223956, 0.0331835989440856, 0.0346645850028511,
    0.0362116675603705, 0.0378277965074423, 0.0395160533886726,
    0.0412796572781925, 0.0431219709176092, 0.0450465071278942,
    0.0470569355074350, 0.0491570894290204, 0.0513509733491021,
    0.0536427704432691, 0.0560368505824939, 0.0585377786653591,
    0.0611503233221510, 0.0638794660074186, 0.0667304104983335,
    0.0697085928169619, 0.0728196915953685, 0.0760696389033161,
    0.0794646315592050, 0.0830111429458216, 0.0867159353534234,
    0.0905860728736973, 0.0946289348691763, 0.0988522300437961,
    0.1032640111414228, 0.1078726903003755, 0.1126870550932231,
    0.1177162852824382, 0.1229699703238561, 0.1284581276513148,
    0.1341912217773400, 0.1401801842462939, 0.1464364344780349,
    0.1529719015418313, 0.1597990469020447, 0.1669308881789572,
    0.1743810239700432, 0.1821636597790175, 0.1902936351020982,
    0.1987864517231309, 0.2076583032715261, 0.2169261060993699,
    0.2266075315365799, 0.2367210395856142, 0.2472859141199736,
    0.2583222996536178, 0.2698512397514017, 0.2818947171537718,
    0.2944756956922309, 0.3076181640754921, 0.3213471816298112,
    0.3356889260807141, 0.3506707434672246, 0.3663212002837674,
    0.3826701379491676, 0.3997487297066054, 0.4175895400630182,
    0.4362265868812885, 0.4556954062436073, 0.4760331202096971,
    0.4972785075990854, 0.5194720779323964, 0.5426561486726478,
    0.5668749259138306, 0.5921745886706254, 0.6186033769299742,
    0.6462116836323980, 0.6750521507584486, 0.7051797697035029,
    0.7366519861322902, 0.7695288095130848, 0.8038729275404152,
    0.8397498256644669, 0.8772279119550889, 0.9163786475384874,
    0.9572766828553213, 1.0000000000000000
};
FLOAT_T *xg_vol_table = gs_vol_table;
FLOAT_T *vol_table = def_vol_table;

FLOAT_T bend_fine[256];
FLOAT_T bend_coarse[128];

void init_bend_fine(void)
{
	int i;
	
	for (i = 0; i < 256; i++)
		bend_fine[i] = pow(2.0, i / 12.0 / 256);
}

void init_bend_coarse(void)
{
	int i;
	
	for (i = 0; i < 128; i++)
		bend_coarse[i] = pow(2.0, i / 12.0);
}

/*
 * midi_time_table(x + 16y) = midi_time_table(x) * (2^y)
 * midi_time_table(64) = 1
 * then,
 * midi_time_table(x) := (2^(x/16))/16
 */
FLOAT_T midi_time_table[128] =
{
    0.06250, 0.06527, 0.06816, 0.07117, 0.07433, 0.07762, 0.08105, 0.08464,
    0.08839, 0.09230, 0.09639, 0.10066, 0.10511, 0.10977, 0.11463, 0.11970,
    0.12500, 0.13053, 0.13631, 0.14235, 0.14865, 0.15523, 0.16210, 0.16928,
    0.17678, 0.18460, 0.19278, 0.20131, 0.21022, 0.21953, 0.22925, 0.23940,
    0.25000, 0.26107, 0.27263, 0.28470, 0.29730, 0.31046, 0.32421, 0.33856,
    0.35355, 0.36921, 0.38555, 0.40262, 0.42045, 0.43906, 0.45850, 0.47880,
    0.50000, 0.52214, 0.54525, 0.56939, 0.59460, 0.62093, 0.64842, 0.67713,
    0.70711, 0.73841, 0.77111, 0.80525, 0.84090, 0.87813, 0.91700, 0.95760,
    1.00000, 1.04427, 1.09051, 1.13879, 1.18921, 1.24186, 1.29684, 1.35426,
    1.41421, 1.47683, 1.54221, 1.61049, 1.68179, 1.75625, 1.83401, 1.91521,
    2.00000, 2.08855, 2.18102, 2.27758, 2.37841, 2.48372, 2.59368, 2.70851,
    2.82843, 2.95365, 3.08442, 3.22098, 3.36359, 3.51250, 3.66802, 3.83041,
    4.00000, 4.17710, 4.36203, 4.55515, 4.75683, 4.96743, 5.18736, 5.41702,
    5.65685, 5.90730, 6.16884, 6.44196, 6.72717, 7.02501, 7.33603, 7.66083,
    8.00000, 8.35419, 8.72406, 9.11031, 9.51366, 9.93486,10.37472,10.83404,
   11.31371,11.81461,12.33769,12.88392,13.45434,14.05002,14.67206,15.32165
};
/*
 * midi_time_table2(x) := 2^(x/16/128)  (for lsb tunning)
 */
FLOAT_T midi_time_table2[128] =
{
    1.00000, 1.00034, 1.00068, 1.00102, 1.00135, 1.00169, 1.00203, 1.00237,
    1.00271, 1.00305, 1.00339, 1.00373, 1.00407, 1.00441, 1.00475, 1.00509,
    1.00543, 1.00577, 1.00611, 1.00645, 1.00679, 1.00713, 1.00747, 1.00781,
    1.00816, 1.00850, 1.00884, 1.00918, 1.00952, 1.00986, 1.01021, 1.01055,
    1.01089, 1.01123, 1.01157, 1.01192, 1.01226, 1.01260, 1.01294, 1.01329,
    1.01363, 1.01397, 1.01432, 1.01466, 1.01500, 1.01535, 1.01569, 1.01603,
    1.01638, 1.01672, 1.01707, 1.01741, 1.01776, 1.01810, 1.01844, 1.01879,
    1.01913, 1.01948, 1.01982, 1.02017, 1.02051, 1.02086, 1.02121, 1.02155,
    1.02190, 1.02224, 1.02259, 1.02294, 1.02328, 1.02363, 1.02397, 1.02432,
    1.02467, 1.02501, 1.02536, 1.02571, 1.02606, 1.02640, 1.02675, 1.02710,
    1.02745, 1.02779, 1.02814, 1.02849, 1.02884, 1.02919, 1.02953, 1.02988,
    1.03023, 1.03058, 1.03093, 1.03128, 1.03163, 1.03198, 1.03233, 1.03268,
    1.03302, 1.03337, 1.03372, 1.03407, 1.03442, 1.03477, 1.03512, 1.03548,
    1.03583, 1.03618, 1.03653, 1.03688, 1.03723, 1.03758, 1.03793, 1.03828,
    1.03863, 1.03899, 1.03934, 1.03969, 1.04004, 1.04039, 1.04075, 1.04110,
    1.04145, 1.04180, 1.04216, 1.04251, 1.04286, 1.04321, 1.04357, 1.04392
};

#ifdef LOOKUP_SINE
static FLOAT_T sine_table[257]=
{
 0.0, 0.0061358846491544753, 0.012271538285719925, 0.01840672990580482,
 0.024541228522912288, 0.030674803176636626, 0.036807222941358832, 0.04293825693494082,
 0.049067674327418015, 0.055195244349689934, 0.061320736302208578, 0.067443919563664051,
 0.073564563599667426, 0.079682437971430126, 0.085797312344439894, 0.091908956497132724,
 0.098017140329560604, 0.10412163387205459, 0.11022220729388306, 0.11631863091190475,
 0.1224106751992162, 0.12849811079379317, 0.13458070850712617, 0.14065823933284921,
 0.14673047445536175, 0.15279718525844344, 0.15885814333386145, 0.16491312048996989,
 0.17096188876030122, 0.17700422041214875, 0.18303988795514095, 0.18906866414980619,
 0.19509032201612825, 0.2011046348420919, 0.20711137619221856, 0.21311031991609136,
 0.2191012401568698, 0.22508391135979283, 0.23105810828067111, 0.2370236059943672,
 0.24298017990326387, 0.24892760574572015, 0.25486565960451457, 0.26079411791527551,
 0.26671275747489837, 0.27262135544994898, 0.27851968938505306, 0.28440753721127188,
 0.29028467725446233, 0.29615088824362379, 0.30200594931922808, 0.30784964004153487,
 0.31368174039889152, 0.31950203081601569, 0.32531029216226293, 0.33110630575987643,
 0.33688985339222005, 0.34266071731199438, 0.34841868024943456, 0.35416352542049034,
 0.35989503653498811, 0.36561299780477385, 0.37131719395183754, 0.37700741021641826,
 0.38268343236508978, 0.38834504669882625, 0.3939920400610481, 0.39962419984564679,
 0.40524131400498986, 0.41084317105790391, 0.41642956009763715, 0.42200027079979968,
 0.42755509343028208, 0.43309381885315196, 0.43861623853852766, 0.4441221445704292,
 0.44961132965460654, 0.45508358712634384, 0.46053871095824001, 0.46597649576796618,
 0.47139673682599764, 0.47679923006332209, 0.48218377207912272, 0.487550160148436,
 0.49289819222978404, 0.49822766697278187, 0.50353838372571758, 0.50883014254310699,
 0.51410274419322166, 0.51935599016558964, 0.52458968267846895, 0.52980362468629461,
 0.53499761988709715, 0.54017147272989285, 0.54532498842204646, 0.55045797293660481,
 0.55557023301960218, 0.56066157619733603, 0.56573181078361312, 0.57078074588696726,
 0.57580819141784534, 0.58081395809576453, 0.58579785745643886, 0.59075970185887416,
 0.59569930449243336, 0.60061647938386897, 0.60551104140432555, 0.61038280627630948,
 0.61523159058062682, 0.6200572117632891, 0.62485948814238634, 0.62963823891492698,
 0.63439328416364549, 0.63912444486377573, 0.64383154288979139, 0.64851440102211244,
 0.65317284295377676, 0.65780669329707864, 0.66241577759017178, 0.66699992230363747,
 0.67155895484701833, 0.67609270357531592, 0.68060099779545302, 0.68508366777270036,
 0.68954054473706683, 0.693971460889654, 0.69837624940897292, 0.7027547444572253,
 0.70710678118654746, 0.71143219574521643, 0.71573082528381859, 0.72000250796138165,
 0.72424708295146689, 0.7284643904482252, 0.73265427167241282, 0.73681656887736979,
 0.74095112535495911, 0.74505778544146595, 0.74913639452345926, 0.75318679904361241,
 0.75720884650648446, 0.76120238548426178, 0.76516726562245896, 0.76910333764557959,
 0.77301045336273699, 0.77688846567323244, 0.78073722857209438, 0.78455659715557524,
 0.78834642762660623, 0.79210657730021239, 0.79583690460888346, 0.79953726910790501,
 0.80320753148064483, 0.80684755354379922, 0.81045719825259477, 0.8140363297059483,
 0.81758481315158371, 0.82110251499110465, 0.82458930278502529, 0.8280450452577558,
 0.83146961230254524, 0.83486287498638001, 0.83822470555483797, 0.84155497743689833,
 0.84485356524970701, 0.84812034480329712, 0.8513551931052652, 0.85455798836540053,
 0.85772861000027212, 0.86086693863776731, 0.8639728561215867, 0.86704624551569265,
 0.87008699110871135, 0.87309497841829009, 0.8760700941954066, 0.87901222642863341,
 0.88192126434835494, 0.88479709843093779, 0.88763962040285393, 0.89044872324475788,
 0.89322430119551532, 0.89596624975618511, 0.89867446569395382, 0.90134884704602203,
 0.90398929312344334, 0.90659570451491533, 0.90916798309052227, 0.91170603200542988,
 0.91420975570353069, 0.9166790599210427, 0.91911385169005777, 0.9215140393420419,
 0.92387953251128674, 0.92621024213831127, 0.92850608047321548, 0.93076696107898371,
 0.93299279883473885, 0.9351835099389475, 0.93733901191257496, 0.93945922360218992,
 0.94154406518302081, 0.94359345816196039, 0.94560732538052128, 0.94758559101774109,
 0.94952818059303667, 0.95143502096900834, 0.95330604035419375, 0.95514116830577067,
 0.95694033573220894, 0.9587034748958716, 0.96043051941556579, 0.96212140426904158,
 0.96377606579543984, 0.9653944416976894, 0.96697647104485207, 0.96852209427441727,
 0.97003125319454397, 0.97150389098625178, 0.97293995220556007, 0.97433938278557586,
 0.97570213003852857, 0.97702814265775439, 0.97831737071962765, 0.97956976568544052,
 0.98078528040323043, 0.98196386910955524, 0.98310548743121629, 0.98421009238692903,
 0.98527764238894122, 0.98630809724459867, 0.98730141815785843, 0.98825756773074946,
 0.98917650996478101, 0.99005821026229712, 0.99090263542778001, 0.99170975366909953,
 0.99247953459870997, 0.9932119492347945, 0.99390697000235606, 0.99456457073425542,
 0.99518472667219682, 0.99576741446765982, 0.996312612182778, 0.99682029929116567,
 0.99729045667869021, 0.99772306664419164, 0.99811811290014918, 0.99847558057329477,
 0.99879545620517241, 0.99907772775264536, 0.99932238458834954, 0.99952941750109314,
 0.99969881869620425, 0.9998305817958234, 0.9999247018391445, 0.99998117528260111,
 1.0
};

/*
   looks up sin(2 * Pi * x / 1024)
*/
FLOAT_T lookup_sine(int x)
{
  int xx = x & 0xFF;
  switch ((x>>8) & 0x03)
    {
    default: /* just to shut gcc up. */
    case 0:
      return sine_table[xx];
    case 1:
      return sine_table[0x100 - xx];
    case 2:
      return -sine_table[xx];
    case 3:
      return -sine_table[0x100 - xx];
    }
}
#endif /* LOOKUP_SINE */

#ifdef LOOKUP_HACK
int16 _u2l[] =
{
 -32256, -31228, -30200, -29172, -28143, -27115, -26087, -25059,
 -24031, -23002, -21974, -20946, -19918, -18889, -17861, -16833,
 -16062, -15548, -15033, -14519, -14005, -13491, -12977, -12463,
 -11949, -11435, -10920, -10406, -9892, -9378, -8864, -8350,
 -7964, -7707, -7450, -7193, -6936, -6679, -6422, -6165,
 -5908, -5651, -5394, -5137, -4880, -4623, -4365, -4108,
 -3916, -3787, -3659, -3530, -3402, -3273, -3144, -3016,
 -2887, -2759, -2630, -2502, -2373, -2245, -2116, -1988,
 -1891, -1827, -1763, -1698, -1634, -1570, -1506, -1441,
 -1377, -1313, -1249, -1184, -1120, -1056, -992, -927,
 -879, -847, -815, -783, -751, -718, -686, -654,
 -622, -590, -558, -526, -494, -461, -429, -397,
 -373, -357, -341, -325, -309, -293, -277, -261,
 -245, -228, -212, -196, -180, -164, -148, -132,
 -120, -112, -104, -96, -88, -80, -72, -64,
 -56, -48, -40, -32, -24, -16, -8, 0,
 32256, 31228, 30200, 29172, 28143, 27115, 26087, 25059,
 24031, 23002, 21974, 20946, 19918, 18889, 17861, 16833,
 16062, 15548, 15033, 14519, 14005, 13491, 12977, 12463,
 11949, 11435, 10920, 10406, 9892, 9378, 8864, 8350,
 7964, 7707, 7450, 7193, 6936, 6679, 6422, 6165,
 5908, 5651, 5394, 5137, 4880, 4623, 4365, 4108,
 3916, 3787, 3659, 3530, 3402, 3273, 3144, 3016,
 2887, 2759, 2630, 2502, 2373, 2245, 2116, 1988,
 1891, 1827, 1763, 1698, 1634, 1570, 1506, 1441,
 1377, 1313, 1249, 1184, 1120, 1056, 992, 927,
 879, 847, 815, 783, 751, 718, 686, 654,
 622, 590, 558, 526, 494, 461, 429, 397,
 373, 357, 341, 325, 309, 293, 277, 261,
 245, 228, 212, 196, 180, 164, 148, 132,
 120, 112, 104, 96, 88, 80, 72, 64,
 56, 48, 40, 32, 24, 16, 8, 0
};

int32 *mixup;
#ifdef LOOKUP_INTERPOLATION
int8 *iplookup;
#endif

#endif

void init_tables(void)
{
  int i;
  FLOAT_T *velocity_vol_table;
#ifdef LOOKUP_HACK
  int j,v;
  mixup = (int32 *)safe_malloc(1<<(7+8+2)); /* Give your cache a workout! */

  for (i=0; i<128; i++)
    {
      v=_u2l[255-i];
      for (j=-128; j<128; j++)
	{
	  mixup[ ((i & 0x7F)<<8) | (j & 0xFF)] =
	    (v * j) << MIXUP_SHIFT;
	}
    }

#ifdef LOOKUP_INTERPOLATION
  iplookup = (int8 *)safe_malloc(1<<(9+5));
  for (i=-256; i<256; i++)
    for(j=0; j<32; j++)
      iplookup[((i<<5) & 0x3FE0) | j] = (i * j)>>5;
  /* I don't know. Quantum bits? Magick? */
#endif

#endif

	/* generate velocity table */
	switch(opt_velocity_table) {
	case 1:
		velocity_vol_table = exp_vol_table;
		break;
	case 2:
		velocity_vol_table = def_vol_table;
		break;
	case 3:
		velocity_vol_table = gs_vol_table;
		break;
	case 4:
		velocity_vol_table = log_vol_table;
		break;
	default:
		velocity_vol_table = linear_vol_table;
		break;
	}

	for(i=0;i<128;i++)
	{
		velocity_table[i] = (uint8)(velocity_vol_table[i] * 127.0 + 0.5);
	}
}

#ifdef LOOKUP_HACK
uint8 _l2u_[] =
{
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
 0x07, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
 0x08, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
 0x09, 0x09, 0x09, 0x09, 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x19, 0x19, 0x19, 0x19, 0x19,
 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1D, 0x1D, 0x1D, 0x1D,
 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D,
 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D,
 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D,
 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x1E,
 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1F, 0x1F, 0x1F, 0x1F,
 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x20, 0x20, 0x20, 0x20,
 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x21,
 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x22, 0x22,
 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23, 0x23, 0x23,
 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x24, 0x24, 0x24,
 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x25, 0x25, 0x25,
 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x26, 0x26, 0x26,
 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,
 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x27, 0x27, 0x27,
 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x28, 0x28,
 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x29, 0x29,
 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29,
 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x2A, 0x2A,
 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2B, 0x2B,
 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B,
 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2C, 0x2C,
 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C,
 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2D, 0x2D,
 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2E, 0x2E,
 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2F, 0x2F,
 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x30,
 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31,
 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x32,
 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x33,
 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x34,
 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x35,
 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x36,
 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37,
 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x38,
 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x39,
 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x3A,
 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3B,
 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3C,
 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3D,
 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E,
 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43,
 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45,
 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47,
 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D,
 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F,
 0x50, 0x50, 0x50, 0x50, 0x51, 0x51, 0x51, 0x51, 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x53, 0x53,
 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x56, 0x56, 0x56, 0x56, 0x57, 0x57, 0x57, 0x57,
 0x58, 0x58, 0x58, 0x58, 0x59, 0x59, 0x59, 0x59, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B,
 0x5C, 0x5C, 0x5C, 0x5C, 0x5D, 0x5D, 0x5D, 0x5D, 0x5E, 0x5E, 0x5E, 0x5E, 0x5F, 0x5F, 0x5F, 0x5F,
 0x60, 0x60, 0x61, 0x61, 0x62, 0x62, 0x63, 0x63, 0x64, 0x64, 0x65, 0x65, 0x66, 0x66, 0x67, 0x67,
 0x68, 0x68, 0x68, 0x69, 0x69, 0x6A, 0x6A, 0x6B, 0x6B, 0x6C, 0x6C, 0x6D, 0x6D, 0x6E, 0x6E, 0x6F,
 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E,
 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0,
 0xEF, 0xEF, 0xEE, 0xEE, 0xED, 0xED, 0xEC, 0xEC, 0xEB, 0xEB, 0xEA, 0xEA, 0xE9, 0xE9, 0xE8, 0xE8,
 0xE7, 0xE7, 0xE6, 0xE6, 0xE5, 0xE5, 0xE4, 0xE4, 0xE3, 0xE3, 0xE2, 0xE2, 0xE1, 0xE1, 0xE0, 0xE0,
 0xDF, 0xDF, 0xDF, 0xDF, 0xDE, 0xDE, 0xDE, 0xDE, 0xDD, 0xDD, 0xDD, 0xDD, 0xDC, 0xDC, 0xDC, 0xDC,
 0xDB, 0xDB, 0xDB, 0xDB, 0xDA, 0xDA, 0xDA, 0xDA, 0xD9, 0xD9, 0xD9, 0xD9, 0xD8, 0xD8, 0xD8, 0xD8,
 0xD7, 0xD7, 0xD7, 0xD7, 0xD6, 0xD6, 0xD6, 0xD6, 0xD5, 0xD5, 0xD5, 0xD5, 0xD4, 0xD4, 0xD4, 0xD4,
 0xD3, 0xD3, 0xD3, 0xD3, 0xD2, 0xD2, 0xD2, 0xD2, 0xD1, 0xD1, 0xD1, 0xD1, 0xD0, 0xD0, 0xD0, 0xD0,
 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE,
 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA,
 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8,
 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4,
 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2,
 0xC2, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
 0xC0, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF,
 0xBF, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE,
 0xBE, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD,
 0xBD, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC,
 0xBC, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
 0xBB, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA,
 0xBA, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9,
 0xB9, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,
 0xB8, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7,
 0xB7, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6,
 0xB6, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
 0xB5, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4,
 0xB4, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3,
 0xB3, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
 0xB2, 0xB2, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1,
 0xB1, 0xB1, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0,
 0xB0, 0xB0, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
 0xAF, 0xAF, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
 0xAE, 0xAE, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
 0xAD, 0xAD, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
 0xAC, 0xAC, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
 0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
 0xAA, 0xAA, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
 0xA9, 0xA9, 0xA9, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
 0xA8, 0xA8, 0xA8, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
 0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
 0xA6, 0xA6, 0xA6, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
 0xA4, 0xA4, 0xA4, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
 0xA3, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
 0xA2, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
 0xA1, 0xA1, 0xA1, 0xA1, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
 0xA0, 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
 0x9F, 0x9F, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
 0x9E, 0x9E, 0x9E, 0x9E, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89, 0x89, 0x89,
 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88,
 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x87,
 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86,
 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x85,
 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84,
 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x83, 0x83,
 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82,
 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x81,
 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80
};
uint8 *_l2u = _l2u_ + 4096;
#endif /* LOOKUP_HACK */

uint8 reverb_macro_presets[] =
{	/* CHARACTER,PRE-LPF,LEVEL,TIME,DELAY FEEDBACK,PREDELAY TIME */
	0,3,64,80,0,0,		/* 00: Room1 */
	1,4,64,56,0,0,		/* 01: Room2 */
	2,0,64,64,0,0,		/* 02: Room3 */
	3,4,64,72,0,0,		/* 03: Hall1 */
	4,0,64,64,0,0,		/* 04: Hall2 */
	5,0,64,88,0,0,		/* 05: Plate */
	6,0,64,32,40,0,		/* 06: Delay */
	7,0,64,64,32,0,		/* 07: Panning Delay */
};

uint8 chorus_macro_presets[] =
{	/* PRE-LPF,LEVEL,FEEDBACK,DELAY,RATE,DEPTH,SEND TO REVERB,SEND TO DELAY */
	0,64,0,112,3,5,0,0,		/* 00: Chorus1 */
	0,64,5,80,9,19,0,0,		/* 01: Chorus2 */
	0,64,8,80,3,19,0,0,		/* 02: Chorus3 */
	0,64,16,64,9,16,0,0,	/* 03: Chorus4 */
	0,64,64,127,2,24,0,0,	/* 04: Feedback Chorus */
	0,64,112,127,1,5,0,0,	/* 05: Flanger */
	0,64,0,127,0,127,0,0,	/* 06: Short Delay */
	0,64,80,127,0,127,0,0,	/* 07: Short Delay(Feedback) */
};

uint8 delay_macro_presets[] = 
{	/* PRE-LPF,TIME(C),RATIO(L),RATIO(R),LEVEL(C),LEVEL(L),LEVEL(R),LEVEL,FEEDBACK,LEVEL TO REVERB */
	0,97,1,1,127,0,0,64,79,0,		/* 00: Delay1 */
	0,106,1,1,127,0,0,64,79,0,		/* 01: Delay2 */
	0,115,1,1,127,0,0,64,63,0,		/* 02: Delay3 */
	0,83,1,1,127,0,0,64,71,0,		/* 03: Delay4 */
	0,90,12,24,0,125,60,64,73,0,	/* 04: Pan Delay1 */
	0,109,12,24,0,125,60,64,70,0,	/* 05: Pan Delay2 */
	0,115,12,24,0,120,64,64,72,0,	/* 06: Pan Delay3 */
	0,93,12,24,0,120,64,64,63,0,	/* 07: Pan Delay4 */
	0,109,12,24,0,114,60,64,60,36,	/* 08: Delay to Reverb */
	0,110,21,31,97,127,67,64,39,0,	/* 09: Pan Repeat */
};

FLOAT_T delay_time_center_table[] =
{	/* 0x00~0x73, 0.1ms~1000ms */
	0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9,
	2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8,
	5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5,
	10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
	20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48,
	50, 55, 60, 65, 70, 75, 80, 85, 90, 95,
	100, 110, 120, 130, 140, 150, 160, 170, 180, 190,
	200, 220, 240, 260, 280, 300, 320, 340, 360, 380, 400, 420, 440, 460, 480,
	500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000,
};

FLOAT_T pre_delay_time_table[] =
{
	0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9,
	2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9,
	4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9,
	5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5,
	10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
	30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
	50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88,
	90, 92, 94, 96, 98, 100, 100, 100,
};

FLOAT_T rate1_table[] =
{
	0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60, 0.65, 0.70, 0.75, 0.80,
	0.85, 0.90, 0.95, 1.00, 1.05, 1.10, 1.15, 1.20, 1.25, 1.30, 1.35, 1.40, 1.45, 1.50, 1.55, 1.60,
	1.65, 1.70, 1.75, 1.80, 1.85, 1.90, 1.95, 2.00, 2.05, 2.10, 2.15, 2.20, 2.25, 2.30, 2.35, 2.40,
	2.45, 2.50, 2.55, 2.60, 2.65, 2.70, 2.75, 2.80, 2.85, 2.90, 2.95, 3.00, 3.05, 3.10, 3.15, 3.20,
	3.25, 3.30, 3.35, 3.40, 3.45, 3.50, 3.55, 3.60, 3.65, 3.70, 3.75, 3.80, 3.85, 3.90, 3.95, 4.00,
	4.05, 4.10, 4.15, 4.20, 4.25, 4.30, 4.35, 4.40, 4.45, 4.50, 4.55, 4.60, 4.65, 4.70, 4.75, 4.80,
	4.85, 4.90, 4.95, 5.00, 5.10, 5.20, 5.30, 5.40, 5.50, 5.60, 5.70, 5.80, 5.90, 6.00, 6.10, 6.20,
	6.30, 6.40, 6.50, 6.60, 6.70, 6.80, 6.90, 7.00, 7.50, 8.00, 8.50, 9.00, 9.50, 10.00, 10.00, 10.00,
};

FLOAT_T log_vol_table[128] = 
{
    0.000000, 0.011315, 0.022543, 0.033683, 0.044738, 0.055709, 0.066598, 0.077405, 
    0.088131, 0.098778, 0.109347, 0.119840, 0.130256, 0.140598, 0.150867, 0.161062, 
    0.171187, 0.181240, 0.191224, 0.201140, 0.210988, 0.220769, 0.230484, 0.240134, 
    0.249720, 0.259243, 0.268703, 0.278102, 0.287440, 0.296718, 0.305936, 0.315096, 
    0.324198, 0.333243, 0.342232, 0.351165, 0.360043, 0.368867, 0.377638, 0.386355, 
    0.395020, 0.403633, 0.412195, 0.420706, 0.429168, 0.437580, 0.445944, 0.454259, 
    0.462526, 0.470747, 0.478921, 0.487049, 0.495131, 0.503168, 0.511161, 0.519110, 
    0.527015, 0.534877, 0.542697, 0.550474, 0.558210, 0.565904, 0.573558, 0.581171, 
    0.588744, 0.596278, 0.603772, 0.611228, 0.618646, 0.626025, 0.633367, 0.640672, 
    0.647940, 0.655172, 0.662367, 0.669527, 0.676651, 0.683741, 0.690795, 0.697816, 
    0.704802, 0.711755, 0.718674, 0.725561, 0.732415, 0.739236, 0.746025, 0.752782, 
    0.759508, 0.766203, 0.772867, 0.779500, 0.786102, 0.792675, 0.799218, 0.805731, 
    0.812215, 0.818670, 0.825097, 0.831494, 0.837864, 0.844205, 0.850519, 0.856805, 
    0.863064, 0.869296, 0.875501, 0.881680, 0.887832, 0.893958, 0.900059, 0.906133, 
    0.912182, 0.918206, 0.924205, 0.930179, 0.936128, 0.942053, 0.947953, 0.953830, 
    0.959683, 0.965512, 0.971317, 0.977100, 0.982859, 0.988595, 0.994309, 1.000000, 
};

FLOAT_T linear_vol_table[128] = 
{
    0.000000000000000000, 0.007874015748031495, 0.015748031496062991, 0.023622047244094486, 0.031496062992125982, 0.039370078740157478, 0.047244094488188972, 0.055118110236220472,
    0.062992125984251963, 0.070866141732283463, 0.078740157480314954, 0.086614173228346463, 0.094488188976377945, 0.102362204724409445, 0.110236220472440949, 0.118110236220472430,
    0.125984251968503935, 0.133858267716535440, 0.141732283464566926, 0.149606299212598426, 0.157480314960629908, 0.165354330708661434, 0.173228346456692917, 0.181102362204724425,
    0.188976377952755907, 0.196850393700787407, 0.204724409448818889, 0.212598425196850416, 0.220472440944881898, 0.228346456692913380, 0.236220472440944862, 0.244094488188976388,
    0.251968503937007871, 0.259842519685039353, 0.267716535433070879, 0.275590551181102361, 0.283464566929133852, 0.291338582677165334, 0.299212598425196852, 0.307086614173228334,
    0.314960629921259816, 0.322834645669291298, 0.330708661417322869, 0.338582677165354351, 0.346456692913385833, 0.354330708661417315, 0.362204724409448842, 0.370078740157480324,
    0.377952755905511806, 0.385826771653543297, 0.393700787401574814, 0.401574803149606296, 0.409448818897637778, 0.417322834645669261, 0.425196850393700831, 0.433070866141732314,
    0.440944881889763796, 0.448818897637795278, 0.456692913385826760, 0.464566929133858242, 0.472440944881889724, 0.480314960629921206, 0.488188976377952777, 0.496062992125984259,
    0.503937007874015741, 0.511811023622047223, 0.519685039370078705, 0.527559055118110187, 0.535433070866141758, 0.543307086614173240, 0.551181102362204722, 0.559055118110236204,
    0.566929133858267686, 0.574803149606299169, 0.582677165354330651, 0.590551181102362133, 0.598425196850393704, 0.606299212598425186, 0.614173228346456668, 0.622047244094488150,
    0.629921259842519632, 0.637795275590551114, 0.645669291338582596, 0.653543307086614078, 0.661417322834645738, 0.669291338582677220, 0.677165354330708702, 0.685039370078740184,
    0.692913385826771666, 0.700787401574803148, 0.708661417322834630, 0.716535433070866112, 0.724409448818897683, 0.732283464566929165, 0.740157480314960647, 0.748031496062992129,
    0.755905511811023612, 0.763779527559055094, 0.771653543307086576, 0.779527559055118058, 0.787401574803149629, 0.795275590551181111, 0.803149606299212593, 0.811023622047244075,
    0.818897637795275557, 0.826771653543307039, 0.834645669291338521, 0.842519685039370003, 0.850393700787401663, 0.858267716535433145, 0.866141732283464627, 0.874015748031496109,
    0.881889763779527591, 0.889763779527559073, 0.897637795275590555, 0.905511811023622037, 0.913385826771653520, 0.921259842519685002, 0.929133858267716484, 0.937007874015747966,
    0.944881889763779448, 0.952755905511810930, 0.960629921259842412, 0.968503937007873894, 0.976377952755905554, 0.984251968503937036, 0.992125984251968518, 1.000000000000000000,
};

FLOAT_T exp_vol_table[128] = 
{
    0.000000, 0.004601, 0.009238, 0.013911, 0.018622, 0.023369, 0.028155, 0.032978, 
    0.037839, 0.042739, 0.047677, 0.052655, 0.057672, 0.062728, 0.067825, 0.072961, 
    0.078139, 0.083357, 0.088617, 0.093918, 0.099261, 0.104646, 0.110074, 0.115544, 
    0.121058, 0.126616, 0.132217, 0.137863, 0.143554, 0.149289, 0.155070, 0.160896, 
    0.166769, 0.172688, 0.178653, 0.184666, 0.190726, 0.196835, 0.202991, 0.209197, 
    0.215451, 0.221755, 0.228108, 0.234512, 0.240966, 0.247472, 0.254029, 0.260637, 
    0.267298, 0.274012, 0.280779, 0.287599, 0.294473, 0.301401, 0.308385, 0.315423, 
    0.322517, 0.329667, 0.336874, 0.344137, 0.351458, 0.358837, 0.366274, 0.373770, 
    0.381326, 0.388941, 0.396616, 0.404352, 0.412149, 0.420007, 0.427928, 0.435912, 
    0.443958, 0.452068, 0.460243, 0.468481, 0.476785, 0.485155, 0.493591, 0.502093, 
    0.510663, 0.519300, 0.528006, 0.536781, 0.545624, 0.554538, 0.563522, 0.572578, 
    0.581705, 0.590904, 0.600175, 0.609520, 0.618939, 0.628433, 0.638001, 0.647645, 
    0.657365, 0.667162, 0.677037, 0.686990, 0.697021, 0.707132, 0.717322, 0.727593, 
    0.737945, 0.748380, 0.758896, 0.769496, 0.780179, 0.790947, 0.801801, 0.812739, 
    0.823765, 0.834877, 0.846078, 0.857367, 0.868745, 0.880213, 0.891772, 0.903422, 
    0.915164, 0.926999, 0.938928, 0.950950, 0.963068, 0.975282, 0.987592, 1.000000, 
};

FLOAT_T sc_vol_table[128] = 
{
    0.000000, 0.007874, 0.031496, 0.070866, 0.125984, 0.196850, 0.283465, 0.385827, 
    0.503937, 0.637795, 0.787402, 0.952756, 1.133858, 1.330709, 1.543307, 1.771654, 
    2.015748, 2.275591, 2.551181, 2.842520, 3.149606, 3.472441, 3.811024, 4.165354, 
    4.535433, 4.921260, 5.322835, 5.740157, 6.173228, 6.622047, 7.086614, 7.566929, 
    8.062992, 8.574803, 9.102362, 9.645669, 10.204724, 10.779528, 11.370079, 11.976378, 
    12.598425, 13.236220, 13.889764, 14.559055, 15.244094, 15.944882, 16.661417, 17.393701, 
    18.141732, 18.905512, 19.685039, 20.480315, 21.291339, 22.118110, 22.960630, 23.818898, 
    24.692913, 25.582677, 26.488189, 27.409449, 28.346457, 29.299213, 30.267717, 31.251969, 
    32.251969, 33.267717, 34.299213, 35.346457, 36.409449, 37.488189, 38.582677, 39.692913, 
    40.818898, 41.960630, 43.118110, 44.291339, 45.480315, 46.685039, 47.905512, 49.141732, 
    50.393701, 51.661417, 52.944882, 54.244094, 55.559055, 56.889764, 58.236220, 59.598425, 
    60.976378, 62.370079, 63.779528, 65.204724, 66.645669, 68.102362, 69.574803, 71.062992, 
    72.566929, 74.086614, 75.622047, 77.173228, 78.740157, 80.322835, 81.921260, 83.535433, 
    85.165354, 86.811024, 88.472441, 90.149606, 91.842520, 93.551181, 95.275591, 97.015748, 
    98.771654, 100.543307, 102.330709, 104.133858, 105.952756, 107.787402, 109.637795, 111.503937, 
    113.385827, 115.283465, 117.196850, 119.125984, 121.070866, 123.031496, 125.007874, 127.000000, 
};

FLOAT_T sc_vel_table[128] = 
{
    1.016000, 1.060423, 1.151432, 1.275990, 1.429005, 1.607424, 1.809141, 2.032582, 
    2.276514, 2.539938, 2.822025, 3.122069, 3.439465, 3.773686, 4.124269, 4.490803, 
    4.872919, 5.270290, 5.682617, 6.109630, 6.551085, 7.006757, 7.476442, 7.959952, 
    8.457114, 8.967769, 9.491771, 10.028985, 10.579287, 11.142561, 11.718701, 12.307610, 
    12.909195, 13.523374, 14.150070, 14.789212, 15.440734, 16.104577, 16.780685, 17.469009, 
    18.169503, 18.882126, 19.606840, 20.343613, 21.092414, 21.853217, 22.626000, 23.410743, 
    24.207429, 25.016045, 25.836580, 26.669025, 27.513376, 28.369629, 29.237784, 30.117843, 
    31.009810, 31.913691, 32.829495, 33.757233, 34.696918, 35.648563, 36.612187, 37.587806, 
    38.575442, 39.575117, 40.586854, 41.610680, 42.646622, 43.694708, 44.754969, 45.827438, 
    46.912148, 48.009134, 49.118435, 50.240087, 51.374130, 52.520607, 53.679559, 54.851031, 
    56.035069, 57.231719, 58.441029, 59.663051, 60.897833, 62.145430, 63.405894, 64.679280, 
    65.965646, 67.265048, 68.577546, 69.903200, 71.242071, 72.594222, 73.959717, 75.338622, 
    76.731003, 78.136927, 79.556465, 80.989686, 82.436661, 83.897465, 85.372170, 86.860852, 
    88.363588, 89.880455, 91.411533, 92.956901, 94.516642, 96.090837, 97.679572, 99.282930, 
    100.901000, 102.533868, 104.181623, 105.844356, 107.522158, 109.215122, 110.923342, 112.646914, 
    114.385934, 116.140499, 117.910710, 119.696666, 121.498469, 123.316223, 125.150031, 127.000000, 
};

FLOAT_T sc_pan_table[128] = 
{
    0.000000, 0.820869, 1.652158, 2.493654, 3.345139, 4.206398, 5.077212, 5.957362, 
    6.846629, 7.744792, 8.651630, 9.566919, 10.490436, 11.421956, 12.361254, 13.308103, 
    14.262276, 15.223544, 16.191678, 17.166447, 18.147619, 19.134964, 20.128246, 21.127232, 
    22.131687, 23.141374, 24.156056, 25.175496, 26.199453, 27.227687, 28.259959, 29.296025, 
    30.335642, 31.378567, 32.424555, 33.473359, 34.524733, 35.578429, 36.634198, 37.691790, 
    38.750955, 39.811441, 40.872994, 41.935363, 42.998290, 44.061523, 45.124802, 46.187872, 
    47.250473, 48.312347, 49.373232, 50.432867, 51.490990, 52.547337, 53.601645, 54.653647, 
    55.703078, 56.749670, 57.793156, 58.833265, 59.869728, 60.902274, 61.930631, 62.954525, 
    63.973683, 64.987830, 65.996690, 66.999985, 67.997438, 68.988770, 69.973702, 70.951952, 
    71.923239, 72.887279, 73.843791, 74.792487, 75.733084, 76.665295, 77.588831, 78.503404, 
    79.408726, 80.304504, 81.190449, 82.066267, 82.931666, 83.786350, 84.630025, 85.462394, 
    86.283160, 87.092025, 87.888689, 88.672853, 89.444215, 90.202474, 90.947325, 91.678466, 
    92.395591, 93.098394, 93.786568, 94.459806, 95.117799, 95.760236, 96.386807, 96.997200, 
    97.591102, 98.168200, 98.728179, 99.270723, 99.795516, 100.302241, 100.790577, 101.260207, 
    101.710810, 102.142063, 102.553646, 102.945233, 103.316502, 103.667126, 103.996780, 104.305135, 
    104.591865, 104.856639, 105.099127, 105.318999, 105.515922, 105.689564, 105.839589, 105.965663, 
};

uint8 velocity_table[128];

FLOAT_T attack_vol_table[1024] = 
{
    0.000000, 0.000978, 0.001955, 0.002933, 0.003910, 0.004888, 0.005865, 0.006843, 
    0.007820, 0.008798, 0.009775, 0.010753, 0.011730, 0.012708, 0.013685, 0.014663, 
    0.015640, 0.016618, 0.017595, 0.018573, 0.019550, 0.020528, 0.021505, 0.022483, 
    0.023460, 0.024438, 0.025415, 0.026393, 0.027370, 0.028348, 0.029326, 0.030303, 
    0.031281, 0.032258, 0.033236, 0.034213, 0.035191, 0.036168, 0.037146, 0.038123, 
    0.039101, 0.040078, 0.041056, 0.042033, 0.043011, 0.043988, 0.044966, 0.045943, 
    0.046921, 0.047898, 0.048876, 0.049853, 0.050831, 0.051808, 0.052786, 0.053763, 
    0.054741, 0.055718, 0.056696, 0.057674, 0.058651, 0.059629, 0.060606, 0.061584, 
    0.062561, 0.063539, 0.064516, 0.065494, 0.066471, 0.067449, 0.068426, 0.069404, 
    0.070381, 0.071359, 0.072336, 0.073314, 0.074291, 0.075269, 0.076246, 0.077224, 
    0.078201, 0.079179, 0.080156, 0.081134, 0.082111, 0.083089, 0.084066, 0.085044, 
    0.086022, 0.086999, 0.087977, 0.088954, 0.089932, 0.090909, 0.091887, 0.092864, 
    0.093842, 0.094819, 0.095797, 0.096774, 0.097752, 0.098729, 0.099707, 0.100684, 
    0.101662, 0.102639, 0.103617, 0.104594, 0.105572, 0.106549, 0.107527, 0.108504, 
    0.109482, 0.110459, 0.111437, 0.112414, 0.113392, 0.114370, 0.115347, 0.116325, 
    0.117302, 0.118280, 0.119257, 0.120235, 0.121212, 0.122190, 0.123167, 0.124145, 
    0.125122, 0.126100, 0.127077, 0.128055, 0.129032, 0.130010, 0.130987, 0.131965, 
    0.132942, 0.133920, 0.134897, 0.135875, 0.136852, 0.137830, 0.138807, 0.139785, 
    0.140762, 0.141740, 0.142717, 0.143695, 0.144673, 0.145650, 0.146628, 0.147605, 
    0.148583, 0.149560, 0.150538, 0.151515, 0.152493, 0.153470, 0.154448, 0.155425, 
    0.156403, 0.157380, 0.158358, 0.159335, 0.160313, 0.161290, 0.162268, 0.163245, 
    0.164223, 0.165200, 0.166178, 0.167155, 0.168133, 0.169110, 0.170088, 0.171065, 
    0.172043, 0.173021, 0.173998, 0.174976, 0.175953, 0.176931, 0.177908, 0.178886, 
    0.179863, 0.180841, 0.181818, 0.182796, 0.183773, 0.184751, 0.185728, 0.186706, 
    0.187683, 0.188661, 0.189638, 0.190616, 0.191593, 0.192571, 0.193548, 0.194526, 
    0.195503, 0.196481, 0.197458, 0.198436, 0.199413, 0.200391, 0.201369, 0.202346, 
    0.203324, 0.204301, 0.205279, 0.206256, 0.207234, 0.208211, 0.209189, 0.210166, 
    0.211144, 0.212121, 0.213099, 0.214076, 0.215054, 0.216031, 0.217009, 0.217986, 
    0.218964, 0.219941, 0.220919, 0.221896, 0.222874, 0.223851, 0.224829, 0.225806, 
    0.226784, 0.227761, 0.228739, 0.229717, 0.230694, 0.231672, 0.232649, 0.233627, 
    0.234604, 0.235582, 0.236559, 0.237537, 0.238514, 0.239492, 0.240469, 0.241447, 
    0.242424, 0.243402, 0.244379, 0.245357, 0.246334, 0.247312, 0.248289, 0.249267, 
    0.250244, 0.251222, 0.252199, 0.253177, 0.254154, 0.255132, 0.256109, 0.257087, 
    0.258065, 0.259042, 0.260020, 0.260997, 0.261975, 0.262952, 0.263930, 0.264907, 
    0.265885, 0.266862, 0.267840, 0.268817, 0.269795, 0.270772, 0.271750, 0.272727, 
    0.273705, 0.274682, 0.275660, 0.276637, 0.277615, 0.278592, 0.279570, 0.280547, 
    0.281525, 0.282502, 0.283480, 0.284457, 0.285435, 0.286413, 0.287390, 0.288368, 
    0.289345, 0.290323, 0.291300, 0.292278, 0.293255, 0.294233, 0.295210, 0.296188, 
    0.297165, 0.298143, 0.299120, 0.300098, 0.301075, 0.302053, 0.303030, 0.304008, 
    0.304985, 0.305963, 0.306940, 0.307918, 0.308895, 0.309873, 0.310850, 0.311828, 
    0.312805, 0.313783, 0.314761, 0.315738, 0.316716, 0.317693, 0.318671, 0.319648, 
    0.320626, 0.321603, 0.322581, 0.323558, 0.324536, 0.325513, 0.326491, 0.327468, 
    0.328446, 0.329423, 0.330401, 0.331378, 0.332356, 0.333333, 0.334311, 0.335288, 
    0.336266, 0.337243, 0.338221, 0.339198, 0.340176, 0.341153, 0.342131, 0.343109, 
    0.344086, 0.345064, 0.346041, 0.347019, 0.347996, 0.348974, 0.349951, 0.350929, 
    0.351906, 0.352884, 0.353861, 0.354839, 0.355816, 0.356794, 0.357771, 0.358749, 
    0.359726, 0.360704, 0.361681, 0.362659, 0.363636, 0.364614, 0.365591, 0.366569, 
    0.367546, 0.368524, 0.369501, 0.370479, 0.371457, 0.372434, 0.373412, 0.374389, 
    0.375367, 0.376344, 0.377322, 0.378299, 0.379277, 0.380254, 0.381232, 0.382209, 
    0.383187, 0.384164, 0.385142, 0.386119, 0.387097, 0.388074, 0.389052, 0.390029, 
    0.391007, 0.391984, 0.392962, 0.393939, 0.394917, 0.395894, 0.396872, 0.397849, 
    0.398827, 0.399804, 0.400782, 0.401760, 0.402737, 0.403715, 0.404692, 0.405670, 
    0.406647, 0.407625, 0.408602, 0.409580, 0.410557, 0.411535, 0.412512, 0.413490, 
    0.414467, 0.415445, 0.416422, 0.417400, 0.418377, 0.419355, 0.420332, 0.421310, 
    0.422287, 0.423265, 0.424242, 0.425220, 0.426197, 0.427175, 0.428152, 0.429130, 
    0.430108, 0.431085, 0.432063, 0.433040, 0.434018, 0.434995, 0.435973, 0.436950, 
    0.437928, 0.438905, 0.439883, 0.440860, 0.441838, 0.442815, 0.443793, 0.444770, 
    0.445748, 0.446725, 0.447703, 0.448680, 0.449658, 0.450635, 0.451613, 0.452590, 
    0.453568, 0.454545, 0.455523, 0.456500, 0.457478, 0.458456, 0.459433, 0.460411, 
    0.461388, 0.462366, 0.463343, 0.464321, 0.465298, 0.466276, 0.467253, 0.468231, 
    0.469208, 0.470186, 0.471163, 0.472141, 0.473118, 0.474096, 0.475073, 0.476051, 
    0.477028, 0.478006, 0.478983, 0.479961, 0.480938, 0.481916, 0.482893, 0.483871, 
    0.484848, 0.485826, 0.486804, 0.487781, 0.488759, 0.489736, 0.490714, 0.491691, 
    0.492669, 0.493646, 0.494624, 0.495601, 0.496579, 0.497556, 0.498534, 0.499511, 
    0.500489, 0.501466, 0.502444, 0.503421, 0.504399, 0.505376, 0.506354, 0.507331, 
    0.508309, 0.509286, 0.510264, 0.511241, 0.512219, 0.513196, 0.514174, 0.515152, 
    0.516129, 0.517107, 0.518084, 0.519062, 0.520039, 0.521017, 0.521994, 0.522972, 
    0.523949, 0.524927, 0.525904, 0.526882, 0.527859, 0.528837, 0.529814, 0.530792, 
    0.531769, 0.532747, 0.533724, 0.534702, 0.535679, 0.536657, 0.537634, 0.538612, 
    0.539589, 0.540567, 0.541544, 0.542522, 0.543500, 0.544477, 0.545455, 0.546432, 
    0.547410, 0.548387, 0.549365, 0.550342, 0.551320, 0.552297, 0.553275, 0.554252, 
    0.555230, 0.556207, 0.557185, 0.558162, 0.559140, 0.560117, 0.561095, 0.562072, 
    0.563050, 0.564027, 0.565005, 0.565982, 0.566960, 0.567937, 0.568915, 0.569892, 
    0.570870, 0.571848, 0.572825, 0.573803, 0.574780, 0.575758, 0.576735, 0.577713, 
    0.578690, 0.579668, 0.580645, 0.581623, 0.582600, 0.583578, 0.584555, 0.585533, 
    0.586510, 0.587488, 0.588465, 0.589443, 0.590420, 0.591398, 0.592375, 0.593353, 
    0.594330, 0.595308, 0.596285, 0.597263, 0.598240, 0.599218, 0.600196, 0.601173, 
    0.602151, 0.603128, 0.604106, 0.605083, 0.606061, 0.607038, 0.608016, 0.608993, 
    0.609971, 0.610948, 0.611926, 0.612903, 0.613881, 0.614858, 0.615836, 0.616813, 
    0.617791, 0.618768, 0.619746, 0.620723, 0.621701, 0.622678, 0.623656, 0.624633, 
    0.625611, 0.626588, 0.627566, 0.628543, 0.629521, 0.630499, 0.631476, 0.632454, 
    0.633431, 0.634409, 0.635386, 0.636364, 0.637341, 0.638319, 0.639296, 0.640274, 
    0.641251, 0.642229, 0.643206, 0.644184, 0.645161, 0.646139, 0.647116, 0.648094, 
    0.649071, 0.650049, 0.651026, 0.652004, 0.652981, 0.653959, 0.654936, 0.655914, 
    0.656891, 0.657869, 0.658847, 0.659824, 0.660802, 0.661779, 0.662757, 0.663734, 
    0.664712, 0.665689, 0.666667, 0.667644, 0.668622, 0.669599, 0.670577, 0.671554, 
    0.672532, 0.673509, 0.674487, 0.675464, 0.676442, 0.677419, 0.678397, 0.679374, 
    0.680352, 0.681329, 0.682307, 0.683284, 0.684262, 0.685239, 0.686217, 0.687195, 
    0.688172, 0.689150, 0.690127, 0.691105, 0.692082, 0.693060, 0.694037, 0.695015, 
    0.695992, 0.696970, 0.697947, 0.698925, 0.699902, 0.700880, 0.701857, 0.702835, 
    0.703812, 0.704790, 0.705767, 0.706745, 0.707722, 0.708700, 0.709677, 0.710655, 
    0.711632, 0.712610, 0.713587, 0.714565, 0.715543, 0.716520, 0.717498, 0.718475, 
    0.719453, 0.720430, 0.721408, 0.722385, 0.723363, 0.724340, 0.725318, 0.726295, 
    0.727273, 0.728250, 0.729228, 0.730205, 0.731183, 0.732160, 0.733138, 0.734115, 
    0.735093, 0.736070, 0.737048, 0.738025, 0.739003, 0.739980, 0.740958, 0.741935, 
    0.742913, 0.743891, 0.744868, 0.745846, 0.746823, 0.747801, 0.748778, 0.749756, 
    0.750733, 0.751711, 0.752688, 0.753666, 0.754643, 0.755621, 0.756598, 0.757576, 
    0.758553, 0.759531, 0.760508, 0.761486, 0.762463, 0.763441, 0.764418, 0.765396, 
    0.766373, 0.767351, 0.768328, 0.769306, 0.770283, 0.771261, 0.772239, 0.773216, 
    0.774194, 0.775171, 0.776149, 0.777126, 0.778104, 0.779081, 0.780059, 0.781036, 
    0.782014, 0.782991, 0.783969, 0.784946, 0.785924, 0.786901, 0.787879, 0.788856, 
    0.789834, 0.790811, 0.791789, 0.792766, 0.793744, 0.794721, 0.795699, 0.796676, 
    0.797654, 0.798631, 0.799609, 0.800587, 0.801564, 0.802542, 0.803519, 0.804497, 
    0.805474, 0.806452, 0.807429, 0.808407, 0.809384, 0.810362, 0.811339, 0.812317, 
    0.813294, 0.814272, 0.815249, 0.816227, 0.817204, 0.818182, 0.819159, 0.820137, 
    0.821114, 0.822092, 0.823069, 0.824047, 0.825024, 0.826002, 0.826979, 0.827957, 
    0.828935, 0.829912, 0.830890, 0.831867, 0.832845, 0.833822, 0.834800, 0.835777, 
    0.836755, 0.837732, 0.838710, 0.839687, 0.840665, 0.841642, 0.842620, 0.843597, 
    0.844575, 0.845552, 0.846530, 0.847507, 0.848485, 0.849462, 0.850440, 0.851417, 
    0.852395, 0.853372, 0.854350, 0.855327, 0.856305, 0.857283, 0.858260, 0.859238, 
    0.860215, 0.861193, 0.862170, 0.863148, 0.864125, 0.865103, 0.866080, 0.867058, 
    0.868035, 0.869013, 0.869990, 0.870968, 0.871945, 0.872923, 0.873900, 0.874878, 
    0.875855, 0.876833, 0.877810, 0.878788, 0.879765, 0.880743, 0.881720, 0.882698, 
    0.883675, 0.884653, 0.885630, 0.886608, 0.887586, 0.888563, 0.889541, 0.890518, 
    0.891496, 0.892473, 0.893451, 0.894428, 0.895406, 0.896383, 0.897361, 0.898338, 
    0.899316, 0.900293, 0.901271, 0.902248, 0.903226, 0.904203, 0.905181, 0.906158, 
    0.907136, 0.908113, 0.909091, 0.910068, 0.911046, 0.912023, 0.913001, 0.913978, 
    0.914956, 0.915934, 0.916911, 0.917889, 0.918866, 0.919844, 0.920821, 0.921799, 
    0.922776, 0.923754, 0.924731, 0.925709, 0.926686, 0.927664, 0.928641, 0.929619, 
    0.930596, 0.931574, 0.932551, 0.933529, 0.934506, 0.935484, 0.936461, 0.937439, 
    0.938416, 0.939394, 0.940371, 0.941349, 0.942326, 0.943304, 0.944282, 0.945259, 
    0.946237, 0.947214, 0.948192, 0.949169, 0.950147, 0.951124, 0.952102, 0.953079, 
    0.954057, 0.955034, 0.956012, 0.956989, 0.957967, 0.958944, 0.959922, 0.960899, 
    0.961877, 0.962854, 0.963832, 0.964809, 0.965787, 0.966764, 0.967742, 0.968719, 
    0.969697, 0.970674, 0.971652, 0.972630, 0.973607, 0.974585, 0.975562, 0.976540, 
    0.977517, 0.978495, 0.979472, 0.980450, 0.981427, 0.982405, 0.983382, 0.984360, 
    0.985337, 0.986315, 0.987292, 0.988270, 0.989247, 0.990225, 0.991202, 0.992180, 
    0.993157, 0.994135, 0.995112, 0.996090, 0.997067, 0.998045, 0.999022, 1.000000, 
};

int opt_velocity_table = 0;

FLOAT_T envelope_coef[128] = {
	64.000000, 64.000000, 32.000000, 21.333333, 16.000000, 12.800000, 10.666667, 9.142857, 
    8.000000, 7.111111, 6.400000, 5.818182, 5.333333, 4.923077, 4.571429, 4.266667, 
    4.000000, 3.764706, 3.555556, 3.368421, 3.200000, 3.047619, 2.909091, 2.782609, 
    2.666667, 2.560000, 2.461538, 2.370370, 2.285714, 2.206897, 2.133333, 2.064516, 
    2.000000, 1.939394, 1.882353, 1.828571, 1.777778, 1.729730, 1.684211, 1.641026, 
    1.600000, 1.560976, 1.523810, 1.488372, 1.454545, 1.422222, 1.391304, 1.361702, 
    1.333333, 1.306122, 1.280000, 1.254902, 1.230769, 1.207547, 1.185185, 1.163636, 
    1.142857, 1.122807, 1.103448, 1.084746, 1.066667, 1.049180, 1.032258, 1.015873, 
    1.000000, 0.984615, 0.969697, 0.955224, 0.941176, 0.927536, 0.914286, 0.901408, 
    0.888889, 0.876712, 0.864865, 0.853333, 0.842105, 0.831169, 0.820513, 0.810127, 
    0.800000, 0.790123, 0.780488, 0.771084, 0.761905, 0.752941, 0.744186, 0.735632, 
    0.727273, 0.719101, 0.711111, 0.703297, 0.695652, 0.688172, 0.680851, 0.673684, 
    0.666667, 0.659794, 0.653061, 0.646465, 0.640000, 0.633663, 0.627451, 0.621359, 
    0.615385, 0.609524, 0.603774, 0.598131, 0.592593, 0.587156, 0.581818, 0.576577, 
    0.571429, 0.566372, 0.561404, 0.556522, 0.551724, 0.547009, 0.542373, 0.537815, 
    0.533333, 0.528926, 0.524590, 0.520325, 0.516129, 0.512000, 0.507937, 0.503937, 
};

FLOAT_T convex_table[128] = {
	0.000000, 0.123415, 0.248844, 0.322216, 0.374273, 0.414653, 0.447645, 0.475539, 
    0.499703, 0.521016, 0.540082, 0.557329, 0.573074, 0.587558, 0.600968, 0.613453, 
    0.625132, 0.636102, 0.646445, 0.656229, 0.665511, 0.674340, 0.682758, 0.690802, 
    0.698503, 0.705890, 0.712987, 0.719817, 0.726398, 0.732748, 0.738882, 0.744816, 
    0.750561, 0.756129, 0.761531, 0.766777, 0.771874, 0.776833, 0.781658, 0.786359, 
    0.790940, 0.795408, 0.799769, 0.804027, 0.808187, 0.812254, 0.816231, 0.820123, 
    0.823932, 0.827663, 0.831319, 0.834903, 0.838417, 0.841863, 0.845246, 0.848566, 
    0.851827, 0.855030, 0.858177, 0.861270, 0.864311, 0.867303, 0.870245, 0.873140, 
    0.875990, 0.878796, 0.881558, 0.884280, 0.886960, 0.889602, 0.892206, 0.894773, 
    0.897304, 0.899800, 0.902262, 0.904691, 0.907087, 0.909453, 0.911788, 0.914093, 
    0.916369, 0.918617, 0.920838, 0.923031, 0.925198, 0.927340, 0.929456, 0.931548, 
    0.933616, 0.935661, 0.937683, 0.939682, 0.941660, 0.943616, 0.945552, 0.947467, 
    0.949361, 0.951237, 0.953093, 0.954930, 0.956748, 0.958549, 0.960332, 0.962097, 
    0.963846, 0.965577, 0.967293, 0.968992, 0.970675, 0.972343, 0.973995, 0.975633, 
    0.977256, 0.978864, 0.980459, 0.982039, 0.983606, 0.985159, 0.986699, 0.988226, 
    0.989741, 0.991242, 0.992732, 0.994209, 0.995674, 0.997128, 0.998570, 1.000000, 
};

FLOAT_T concave_table[128] = {
	0.000000, 0.001430, 0.002872, 0.004326, 0.005791, 0.007268, 0.008758, 0.010259, 
    0.011774, 0.013301, 0.014841, 0.016394, 0.017961, 0.019541, 0.021136, 0.022744, 
    0.024367, 0.026005, 0.027657, 0.029325, 0.031008, 0.032707, 0.034423, 0.036154, 
    0.037903, 0.039668, 0.041451, 0.043252, 0.045070, 0.046907, 0.048763, 0.050639, 
    0.052533, 0.054448, 0.056384, 0.058340, 0.060318, 0.062317, 0.064339, 0.066384, 
    0.068452, 0.070544, 0.072660, 0.074802, 0.076969, 0.079162, 0.081383, 0.083631, 
    0.085907, 0.088212, 0.090547, 0.092913, 0.095309, 0.097738, 0.100200, 0.102696, 
    0.105227, 0.107794, 0.110398, 0.113040, 0.115720, 0.118442, 0.121204, 0.124010, 
    0.126860, 0.129755, 0.132697, 0.135689, 0.138730, 0.141823, 0.144970, 0.148173, 
    0.151434, 0.154754, 0.158137, 0.161583, 0.165097, 0.168681, 0.172337, 0.176068, 
    0.179877, 0.183769, 0.187746, 0.191813, 0.195973, 0.200231, 0.204592, 0.209060, 
    0.213641, 0.218342, 0.223167, 0.228126, 0.233223, 0.238469, 0.243871, 0.249439, 
    0.255184, 0.261118, 0.267252, 0.273602, 0.280183, 0.287013, 0.294110, 0.301497, 
    0.309198, 0.317242, 0.325660, 0.334489, 0.343771, 0.353555, 0.363898, 0.374868, 
    0.386547, 0.399032, 0.412442, 0.426926, 0.442671, 0.459918, 0.478984, 0.500297, 
    0.524461, 0.552355, 0.585347, 0.625727, 0.677784, 0.751156, 0.876585, 1.000000, 
};

FLOAT_T sb_vol_table[1024] = 
{
    0.002770, 0.002786, 0.002802, 0.002818, 0.002835, 0.002851, 0.002867, 0.002884, 
    0.002901, 0.002917, 0.002934, 0.002951, 0.002968, 0.002985, 0.003003, 0.003020, 
    0.003037, 0.003055, 0.003073, 0.003090, 0.003108, 0.003126, 0.003144, 0.003162, 
    0.003181, 0.003199, 0.003217, 0.003236, 0.003255, 0.003273, 0.003292, 0.003311, 
    0.003330, 0.003350, 0.003369, 0.003388, 0.003408, 0.003428, 0.003447, 0.003467, 
    0.003487, 0.003508, 0.003528, 0.003548, 0.003569, 0.003589, 0.003610, 0.003631, 
    0.003652, 0.003673, 0.003694, 0.003715, 0.003737, 0.003758, 0.003780, 0.003802, 
    0.003824, 0.003846, 0.003868, 0.003890, 0.003913, 0.003936, 0.003958, 0.003981, 
    0.004004, 0.004027, 0.004050, 0.004074, 0.004097, 0.004121, 0.004145, 0.004169, 
    0.004193, 0.004217, 0.004241, 0.004266, 0.004290, 0.004315, 0.004340, 0.004365, 
    0.004390, 0.004416, 0.004441, 0.004467, 0.004493, 0.004519, 0.004545, 0.004571, 
    0.004597, 0.004624, 0.004651, 0.004677, 0.004704, 0.004732, 0.004759, 0.004786, 
    0.004814, 0.004842, 0.004870, 0.004898, 0.004926, 0.004955, 0.004983, 0.005012, 
    0.005041, 0.005070, 0.005099, 0.005129, 0.005158, 0.005188, 0.005218, 0.005248, 
    0.005278, 0.005309, 0.005339, 0.005370, 0.005401, 0.005433, 0.005464, 0.005495, 
    0.005527, 0.005559, 0.005591, 0.005623, 0.005656, 0.005689, 0.005721, 0.005754, 
    0.005788, 0.005821, 0.005855, 0.005888, 0.005922, 0.005957, 0.005991, 0.006026, 
    0.006060, 0.006095, 0.006131, 0.006166, 0.006202, 0.006237, 0.006273, 0.006310, 
    0.006346, 0.006383, 0.006419, 0.006457, 0.006494, 0.006531, 0.006569, 0.006607, 
    0.006645, 0.006683, 0.006722, 0.006761, 0.006800, 0.006839, 0.006879, 0.006918, 
    0.006958, 0.006998, 0.007039, 0.007079, 0.007120, 0.007161, 0.007203, 0.007244, 
    0.007286, 0.007328, 0.007371, 0.007413, 0.007456, 0.007499, 0.007542, 0.007586, 
    0.007630, 0.007674, 0.007718, 0.007762, 0.007807, 0.007852, 0.007898, 0.007943, 
    0.007989, 0.008035, 0.008082, 0.008128, 0.008175, 0.008222, 0.008270, 0.008318, 
    0.008366, 0.008414, 0.008463, 0.008511, 0.008561, 0.008610, 0.008660, 0.008710, 
    0.008760, 0.008810, 0.008861, 0.008913, 0.008964, 0.009016, 0.009068, 0.009120, 
    0.009173, 0.009226, 0.009279, 0.009333, 0.009386, 0.009441, 0.009495, 0.009550, 
    0.009605, 0.009661, 0.009716, 0.009772, 0.009829, 0.009886, 0.009943, 0.010000, 
    0.010058, 0.010116, 0.010174, 0.010233, 0.010292, 0.010351, 0.010411, 0.010471, 
    0.010532, 0.010593, 0.010654, 0.010715, 0.010777, 0.010839, 0.010902, 0.010965, 
    0.011028, 0.011092, 0.011156, 0.011220, 0.011285, 0.011350, 0.011416, 0.011482, 
    0.011548, 0.011614, 0.011682, 0.011749, 0.011817, 0.011885, 0.011954, 0.012023, 
    0.012092, 0.012162, 0.012232, 0.012303, 0.012374, 0.012445, 0.012517, 0.012589, 
    0.012662, 0.012735, 0.012809, 0.012882, 0.012957, 0.013032, 0.013107, 0.013183, 
    0.013259, 0.013335, 0.013412, 0.013490, 0.013568, 0.013646, 0.013725, 0.013804, 
    0.013884, 0.013964, 0.014044, 0.014125, 0.014207, 0.014289, 0.014371, 0.014454, 
    0.014538, 0.014622, 0.014706, 0.014791, 0.014876, 0.014962, 0.015049, 0.015136, 
    0.015223, 0.015311, 0.015399, 0.015488, 0.015578, 0.015668, 0.015758, 0.015849, 
    0.015940, 0.016032, 0.016125, 0.016218, 0.016312, 0.016406, 0.016501, 0.016596, 
    0.016692, 0.016788, 0.016885, 0.016982, 0.017080, 0.017179, 0.017278, 0.017378, 
    0.017478, 0.017579, 0.017681, 0.017783, 0.017885, 0.017989, 0.018093, 0.018197, 
    0.018302, 0.018408, 0.018514, 0.018621, 0.018728, 0.018836, 0.018945, 0.019055, 
    0.019165, 0.019275, 0.019387, 0.019498, 0.019611, 0.019724, 0.019838, 0.019953, 
    0.020068, 0.020184, 0.020300, 0.020417, 0.020535, 0.020654, 0.020773, 0.020893, 
    0.021014, 0.021135, 0.021257, 0.021380, 0.021503, 0.021627, 0.021752, 0.021878, 
    0.022004, 0.022131, 0.022259, 0.022387, 0.022516, 0.022646, 0.022777, 0.022909, 
    0.023041, 0.023174, 0.023308, 0.023442, 0.023578, 0.023714, 0.023851, 0.023988, 
    0.024127, 0.024266, 0.024406, 0.024547, 0.024689, 0.024831, 0.024975, 0.025119, 
    0.025264, 0.025410, 0.025556, 0.025704, 0.025852, 0.026002, 0.026152, 0.026303, 
    0.026455, 0.026607, 0.026761, 0.026915, 0.027071, 0.027227, 0.027384, 0.027542, 
    0.027701, 0.027861, 0.028022, 0.028184, 0.028347, 0.028510, 0.028675, 0.028840, 
    0.029007, 0.029174, 0.029343, 0.029512, 0.029682, 0.029854, 0.030026, 0.030200, 
    0.030374, 0.030549, 0.030726, 0.030903, 0.031081, 0.031261, 0.031441, 0.031623, 
    0.031805, 0.031989, 0.032174, 0.032359, 0.032546, 0.032734, 0.032923, 0.033113, 
    0.033304, 0.033497, 0.033690, 0.033884, 0.034080, 0.034277, 0.034475, 0.034674, 
    0.034874, 0.035075, 0.035278, 0.035481, 0.035686, 0.035892, 0.036099, 0.036308, 
    0.036517, 0.036728, 0.036940, 0.037154, 0.037368, 0.037584, 0.037801, 0.038019, 
    0.038238, 0.038459, 0.038681, 0.038905, 0.039129, 0.039355, 0.039582, 0.039811, 
    0.040041, 0.040272, 0.040504, 0.040738, 0.040973, 0.041210, 0.041448, 0.041687, 
    0.041928, 0.042170, 0.042413, 0.042658, 0.042904, 0.043152, 0.043401, 0.043652, 
    0.043904, 0.044157, 0.044412, 0.044668, 0.044926, 0.045186, 0.045446, 0.045709, 
    0.045973, 0.046238, 0.046505, 0.046774, 0.047044, 0.047315, 0.047588, 0.047863, 
    0.048139, 0.048417, 0.048697, 0.048978, 0.049261, 0.049545, 0.049831, 0.050119, 
    0.050408, 0.050699, 0.050992, 0.051286, 0.051582, 0.051880, 0.052180, 0.052481, 
    0.052784, 0.053088, 0.053395, 0.053703, 0.054013, 0.054325, 0.054639, 0.054954, 
    0.055271, 0.055590, 0.055911, 0.056234, 0.056559, 0.056885, 0.057214, 0.057544, 
    0.057876, 0.058210, 0.058546, 0.058884, 0.059224, 0.059566, 0.059910, 0.060256, 
    0.060604, 0.060954, 0.061306, 0.061660, 0.062015, 0.062373, 0.062734, 0.063096, 
    0.063460, 0.063826, 0.064195, 0.064565, 0.064938, 0.065313, 0.065690, 0.066069, 
    0.066451, 0.066834, 0.067220, 0.067608, 0.067999, 0.068391, 0.068786, 0.069183, 
    0.069582, 0.069984, 0.070388, 0.070795, 0.071203, 0.071614, 0.072028, 0.072444, 
    0.072862, 0.073282, 0.073706, 0.074131, 0.074559, 0.074989, 0.075422, 0.075858, 
    0.076296, 0.076736, 0.077179, 0.077625, 0.078073, 0.078524, 0.078977, 0.079433, 
    0.079891, 0.080353, 0.080816, 0.081283, 0.081752, 0.082224, 0.082699, 0.083176, 
    0.083657, 0.084140, 0.084625, 0.085114, 0.085605, 0.086099, 0.086596, 0.087096, 
    0.087599, 0.088105, 0.088614, 0.089125, 0.089640, 0.090157, 0.090678, 0.091201, 
    0.091728, 0.092257, 0.092790, 0.093325, 0.093864, 0.094406, 0.094951, 0.095499, 
    0.096051, 0.096605, 0.097163, 0.097724, 0.098288, 0.098855, 0.099426, 0.100000, 
    0.100577, 0.101158, 0.101742, 0.102329, 0.102920, 0.103514, 0.104112, 0.104713, 
    0.105317, 0.105925, 0.106537, 0.107152, 0.107771, 0.108393, 0.109018, 0.109648, 
    0.110281, 0.110917, 0.111558, 0.112202, 0.112850, 0.113501, 0.114156, 0.114815, 
    0.115478, 0.116145, 0.116815, 0.117490, 0.118168, 0.118850, 0.119536, 0.120226, 
    0.120921, 0.121619, 0.122321, 0.123027, 0.123737, 0.124451, 0.125170, 0.125893, 
    0.126619, 0.127350, 0.128086, 0.128825, 0.129569, 0.130317, 0.131069, 0.131826, 
    0.132587, 0.133352, 0.134122, 0.134896, 0.135675, 0.136458, 0.137246, 0.138038, 
    0.138835, 0.139637, 0.140443, 0.141254, 0.142069, 0.142889, 0.143714, 0.144544, 
    0.145378, 0.146218, 0.147062, 0.147911, 0.148765, 0.149624, 0.150487, 0.151356, 
    0.152230, 0.153109, 0.153993, 0.154882, 0.155776, 0.156675, 0.157580, 0.158489, 
    0.159404, 0.160325, 0.161250, 0.162181, 0.163117, 0.164059, 0.165006, 0.165959, 
    0.166917, 0.167880, 0.168850, 0.169824, 0.170805, 0.171791, 0.172783, 0.173780, 
    0.174783, 0.175792, 0.176807, 0.177828, 0.178855, 0.179887, 0.180926, 0.181970, 
    0.183021, 0.184077, 0.185140, 0.186209, 0.187284, 0.188365, 0.189452, 0.190546, 
    0.191646, 0.192752, 0.193865, 0.194984, 0.196110, 0.197242, 0.198381, 0.199526, 
    0.200678, 0.201837, 0.203002, 0.204174, 0.205353, 0.206538, 0.207730, 0.208930, 
    0.210136, 0.211349, 0.212569, 0.213796, 0.215030, 0.216272, 0.217520, 0.218776, 
    0.220039, 0.221309, 0.222587, 0.223872, 0.225165, 0.226464, 0.227772, 0.229087, 
    0.230409, 0.231739, 0.233077, 0.234423, 0.235776, 0.237137, 0.238506, 0.239883, 
    0.241268, 0.242661, 0.244062, 0.245471, 0.246888, 0.248313, 0.249747, 0.251189, 
    0.252639, 0.254097, 0.255564, 0.257040, 0.258523, 0.260016, 0.261517, 0.263027, 
    0.264545, 0.266073, 0.267609, 0.269153, 0.270707, 0.272270, 0.273842, 0.275423, 
    0.277013, 0.278612, 0.280221, 0.281838, 0.283465, 0.285102, 0.286748, 0.288403, 
    0.290068, 0.291743, 0.293427, 0.295121, 0.296825, 0.298538, 0.300262, 0.301995, 
    0.303739, 0.305492, 0.307256, 0.309030, 0.310814, 0.312608, 0.314413, 0.316228, 
    0.318053, 0.319890, 0.321736, 0.323594, 0.325462, 0.327341, 0.329230, 0.331131, 
    0.333043, 0.334965, 0.336899, 0.338844, 0.340800, 0.342768, 0.344747, 0.346737, 
    0.348739, 0.350752, 0.352777, 0.354813, 0.356862, 0.358922, 0.360994, 0.363078, 
    0.365174, 0.367282, 0.369403, 0.371535, 0.373680, 0.375837, 0.378007, 0.380189, 
    0.382384, 0.384592, 0.386812, 0.389045, 0.391291, 0.393550, 0.395822, 0.398107, 
    0.400405, 0.402717, 0.405042, 0.407380, 0.409732, 0.412098, 0.414477, 0.416869, 
    0.419276, 0.421697, 0.424131, 0.426580, 0.429042, 0.431519, 0.434010, 0.436516, 
    0.439036, 0.441570, 0.444120, 0.446684, 0.449262, 0.451856, 0.454465, 0.457088, 
    0.459727, 0.462381, 0.465050, 0.467735, 0.470435, 0.473151, 0.475883, 0.478630, 
    0.481393, 0.484172, 0.486968, 0.489779, 0.492606, 0.495450, 0.498310, 0.501187, 
    0.504081, 0.506991, 0.509918, 0.512861, 0.515822, 0.518800, 0.521795, 0.524807, 
    0.527837, 0.530884, 0.533949, 0.537032, 0.540132, 0.543250, 0.546387, 0.549541, 
    0.552713, 0.555904, 0.559114, 0.562341, 0.565588, 0.568853, 0.572137, 0.575440, 
    0.578762, 0.582103, 0.585464, 0.588844, 0.592243, 0.595662, 0.599101, 0.602560, 
    0.606038, 0.609537, 0.613056, 0.616595, 0.620155, 0.623735, 0.627336, 0.630957, 
    0.634600, 0.638263, 0.641948, 0.645654, 0.649382, 0.653131, 0.656901, 0.660693, 
    0.664508, 0.668344, 0.672202, 0.676083, 0.679986, 0.683912, 0.687860, 0.691831, 
    0.695825, 0.699842, 0.703882, 0.707946, 0.712033, 0.716143, 0.720278, 0.724436, 
    0.728618, 0.732825, 0.737055, 0.741310, 0.745590, 0.749894, 0.754223, 0.758578, 
    0.762957, 0.767361, 0.771792, 0.776247, 0.780728, 0.785236, 0.789769, 0.794328, 
    0.798914, 0.803526, 0.808165, 0.812831, 0.817523, 0.822243, 0.826990, 0.831764, 
    0.836566, 0.841395, 0.846253, 0.851138, 0.856052, 0.860994, 0.865964, 0.870964, 
    0.875992, 0.881049, 0.886135, 0.891251, 0.896396, 0.901571, 0.906776, 0.912011, 
    0.917276, 0.922571, 0.927897, 0.933254, 0.938642, 0.944061, 0.949511, 0.954993, 
    0.960506, 0.966051, 0.971628, 0.977237, 0.982879, 0.988553, 0.994260, 1.000000, 
};


FLOAT_T cb_to_amp_table[961] = 
{
    1.000000, 0.995677, 0.991373, 0.987088, 0.982821, 0.978572, 0.974342, 0.970130, 
    0.965936, 0.961761, 0.957603, 0.953464, 0.949342, 0.945238, 0.941152, 0.937084, 
    0.933033, 0.929000, 0.924984, 0.920985, 0.917004, 0.913040, 0.909093, 0.905163, 
    0.901250, 0.897355, 0.893475, 0.889613, 0.885768, 0.881939, 0.878126, 0.874330, 
    0.870551, 0.866787, 0.863040, 0.859310, 0.855595, 0.851896, 0.848214, 0.844547, 
    0.840896, 0.837261, 0.833642, 0.830038, 0.826450, 0.822878, 0.819321, 0.815779, 
    0.812252, 0.808741, 0.805245, 0.801764, 0.798298, 0.794848, 0.791412, 0.787990, 
    0.784584, 0.781192, 0.777816, 0.774453, 0.771105, 0.767772, 0.764453, 0.761149, 
    0.757858, 0.754582, 0.751320, 0.748072, 0.744839, 0.741619, 0.738413, 0.735221, 
    0.732043, 0.728878, 0.725728, 0.722590, 0.719467, 0.716357, 0.713260, 0.710177, 
    0.707107, 0.704050, 0.701007, 0.697976, 0.694959, 0.691955, 0.688964, 0.685986, 
    0.683020, 0.680068, 0.677128, 0.674201, 0.671286, 0.668384, 0.665495, 0.662618, 
    0.659754, 0.656902, 0.654062, 0.651235, 0.648420, 0.645617, 0.642826, 0.640047, 
    0.637280, 0.634525, 0.631783, 0.629051, 0.626332, 0.623625, 0.620929, 0.618245, 
    0.615572, 0.612911, 0.610262, 0.607624, 0.604997, 0.602382, 0.599778, 0.597185, 
    0.594604, 0.592033, 0.589474, 0.586926, 0.584389, 0.581862, 0.579347, 0.576843, 
    0.574349, 0.571866, 0.569394, 0.566933, 0.564482, 0.562042, 0.559612, 0.557193, 
    0.554785, 0.552387, 0.549999, 0.547621, 0.545254, 0.542897, 0.540550, 0.538213, 
    0.535887, 0.533570, 0.531264, 0.528967, 0.526681, 0.524404, 0.522137, 0.519880, 
    0.517632, 0.515395, 0.513167, 0.510949, 0.508740, 0.506541, 0.504351, 0.502171, 
    0.500000, 0.497839, 0.495687, 0.493544, 0.491410, 0.489286, 0.487171, 0.485065, 
    0.482968, 0.480880, 0.478802, 0.476732, 0.474671, 0.472619, 0.470576, 0.468542, 
    0.466516, 0.464500, 0.462492, 0.460493, 0.458502, 0.456520, 0.454547, 0.452582, 
    0.450625, 0.448677, 0.446738, 0.444807, 0.442884, 0.440969, 0.439063, 0.437165, 
    0.435275, 0.433394, 0.431520, 0.429655, 0.427798, 0.425948, 0.424107, 0.422274, 
    0.420448, 0.418631, 0.416821, 0.415019, 0.413225, 0.411439, 0.409660, 0.407889, 
    0.406126, 0.404371, 0.402623, 0.400882, 0.399149, 0.397424, 0.395706, 0.393995, 
    0.392292, 0.390596, 0.388908, 0.387227, 0.385553, 0.383886, 0.382227, 0.380574, 
    0.378929, 0.377291, 0.375660, 0.374036, 0.372419, 0.370809, 0.369207, 0.367611, 
    0.366021, 0.364439, 0.362864, 0.361295, 0.359733, 0.358178, 0.356630, 0.355088, 
    0.353553, 0.352025, 0.350503, 0.348988, 0.347480, 0.345977, 0.344482, 0.342993, 
    0.341510, 0.340034, 0.338564, 0.337100, 0.335643, 0.334192, 0.332748, 0.331309, 
    0.329877, 0.328451, 0.327031, 0.325617, 0.324210, 0.322808, 0.321413, 0.320024, 
    0.318640, 0.317263, 0.315891, 0.314526, 0.313166, 0.311812, 0.310464, 0.309122, 
    0.307786, 0.306456, 0.305131, 0.303812, 0.302499, 0.301191, 0.299889, 0.298593, 
    0.297302, 0.296017, 0.294737, 0.293463, 0.292194, 0.290931, 0.289674, 0.288421, 
    0.287175, 0.285933, 0.284697, 0.283466, 0.282241, 0.281021, 0.279806, 0.278597, 
    0.277392, 0.276193, 0.274999, 0.273811, 0.272627, 0.271448, 0.270275, 0.269107, 
    0.267943, 0.266785, 0.265632, 0.264484, 0.263340, 0.262202, 0.261068, 0.259940, 
    0.258816, 0.257697, 0.256583, 0.255474, 0.254370, 0.253270, 0.252175, 0.251085, 
    0.250000, 0.248919, 0.247843, 0.246772, 0.245705, 0.244643, 0.243585, 0.242533, 
    0.241484, 0.240440, 0.239401, 0.238366, 0.237336, 0.236310, 0.235288, 0.234271, 
    0.233258, 0.232250, 0.231246, 0.230246, 0.229251, 0.228260, 0.227273, 0.226291, 
    0.225313, 0.224339, 0.223369, 0.222403, 0.221442, 0.220485, 0.219532, 0.218583, 
    0.217638, 0.216697, 0.215760, 0.214827, 0.213899, 0.212974, 0.212053, 0.211137, 
    0.210224, 0.209315, 0.208411, 0.207510, 0.206613, 0.205719, 0.204830, 0.203945, 
    0.203063, 0.202185, 0.201311, 0.200441, 0.199575, 0.198712, 0.197853, 0.196998, 
    0.196146, 0.195298, 0.194454, 0.193613, 0.192776, 0.191943, 0.191113, 0.190287, 
    0.189465, 0.188646, 0.187830, 0.187018, 0.186210, 0.185405, 0.184603, 0.183805, 
    0.183011, 0.182220, 0.181432, 0.180648, 0.179867, 0.179089, 0.178315, 0.177544, 
    0.176777, 0.176013, 0.175252, 0.174494, 0.173740, 0.172989, 0.172241, 0.171496, 
    0.170755, 0.170017, 0.169282, 0.168550, 0.167822, 0.167096, 0.166374, 0.165655, 
    0.164938, 0.164225, 0.163516, 0.162809, 0.162105, 0.161404, 0.160706, 0.160012, 
    0.159320, 0.158631, 0.157946, 0.157263, 0.156583, 0.155906, 0.155232, 0.154561, 
    0.153893, 0.153228, 0.152565, 0.151906, 0.151249, 0.150595, 0.149944, 0.149296, 
    0.148651, 0.148008, 0.147368, 0.146731, 0.146097, 0.145466, 0.144837, 0.144211, 
    0.143587, 0.142967, 0.142349, 0.141733, 0.141121, 0.140511, 0.139903, 0.139298, 
    0.138696, 0.138097, 0.137500, 0.136905, 0.136313, 0.135724, 0.135138, 0.134553, 
    0.133972, 0.133393, 0.132816, 0.132242, 0.131670, 0.131101, 0.130534, 0.129970, 
    0.129408, 0.128849, 0.128292, 0.127737, 0.127185, 0.126635, 0.126088, 0.125543, 
    0.125000, 0.124460, 0.123922, 0.123386, 0.122853, 0.122322, 0.121793, 0.121266, 
    0.120742, 0.120220, 0.119700, 0.119183, 0.118668, 0.118155, 0.117644, 0.117135, 
    0.116629, 0.116125, 0.115623, 0.115123, 0.114626, 0.114130, 0.113637, 0.113145, 
    0.112656, 0.112169, 0.111684, 0.111202, 0.110721, 0.110242, 0.109766, 0.109291, 
    0.108819, 0.108348, 0.107880, 0.107414, 0.106949, 0.106487, 0.106027, 0.105568, 
    0.105112, 0.104658, 0.104205, 0.103755, 0.103306, 0.102860, 0.102415, 0.101972, 
    0.101532, 0.101093, 0.100656, 0.100221, 0.099787, 0.099356, 0.098926, 0.098499, 
    0.098073, 0.097649, 0.097227, 0.096807, 0.096388, 0.095972, 0.095557, 0.095144, 
    0.094732, 0.094323, 0.093915, 0.093509, 0.093105, 0.092702, 0.092302, 0.091903, 
    0.091505, 0.091110, 0.090716, 0.090324, 0.089933, 0.089545, 0.089158, 0.088772, 
    0.088388, 0.088006, 0.087626, 0.087247, 0.086870, 0.086494, 0.086120, 0.085748, 
    0.085378, 0.085008, 0.084641, 0.084275, 0.083911, 0.083548, 0.083187, 0.082827, 
    0.082469, 0.082113, 0.081758, 0.081404, 0.081052, 0.080702, 0.080353, 0.080006, 
    0.079660, 0.079316, 0.078973, 0.078631, 0.078292, 0.077953, 0.077616, 0.077281, 
    0.076947, 0.076614, 0.076283, 0.075953, 0.075625, 0.075298, 0.074972, 0.074648, 
    0.074325, 0.074004, 0.073684, 0.073366, 0.073049, 0.072733, 0.072418, 0.072105, 
    0.071794, 0.071483, 0.071174, 0.070867, 0.070560, 0.070255, 0.069952, 0.069649, 
    0.069348, 0.069048, 0.068750, 0.068453, 0.068157, 0.067862, 0.067569, 0.067277, 
    0.066986, 0.066696, 0.066408, 0.066121, 0.065835, 0.065550, 0.065267, 0.064985, 
    0.064704, 0.064424, 0.064146, 0.063869, 0.063592, 0.063318, 0.063044, 0.062771, 
    0.062500, 0.062230, 0.061961, 0.061693, 0.061426, 0.061161, 0.060896, 0.060633, 
    0.060371, 0.060110, 0.059850, 0.059591, 0.059334, 0.059077, 0.058822, 0.058568, 
    0.058315, 0.058062, 0.057811, 0.057562, 0.057313, 0.057065, 0.056818, 0.056573, 
    0.056328, 0.056085, 0.055842, 0.055601, 0.055360, 0.055121, 0.054883, 0.054646, 
    0.054409, 0.054174, 0.053940, 0.053707, 0.053475, 0.053244, 0.053013, 0.052784, 
    0.052556, 0.052329, 0.052103, 0.051877, 0.051653, 0.051430, 0.051208, 0.050986, 
    0.050766, 0.050546, 0.050328, 0.050110, 0.049894, 0.049678, 0.049463, 0.049249, 
    0.049037, 0.048825, 0.048613, 0.048403, 0.048194, 0.047986, 0.047778, 0.047572, 
    0.047366, 0.047161, 0.046958, 0.046755, 0.046552, 0.046351, 0.046151, 0.045951, 
    0.045753, 0.045555, 0.045358, 0.045162, 0.044967, 0.044772, 0.044579, 0.044386, 
    0.044194, 0.044003, 0.043813, 0.043624, 0.043435, 0.043247, 0.043060, 0.042874, 
    0.042689, 0.042504, 0.042320, 0.042138, 0.041955, 0.041774, 0.041593, 0.041414, 
    0.041235, 0.041056, 0.040879, 0.040702, 0.040526, 0.040351, 0.040177, 0.040003, 
    0.039830, 0.039658, 0.039486, 0.039316, 0.039146, 0.038977, 0.038808, 0.038640, 
    0.038473, 0.038307, 0.038141, 0.037976, 0.037812, 0.037649, 0.037486, 0.037324, 
    0.037163, 0.037002, 0.036842, 0.036683, 0.036524, 0.036366, 0.036209, 0.036053, 
    0.035897, 0.035742, 0.035587, 0.035433, 0.035280, 0.035128, 0.034976, 0.034825, 
    0.034674, 0.034524, 0.034375, 0.034226, 0.034078, 0.033931, 0.033784, 0.033638, 
    0.033493, 0.033348, 0.033204, 0.033060, 0.032918, 0.032775, 0.032634, 0.032492, 
    0.032352, 0.032212, 0.032073, 0.031934, 0.031796, 0.031659, 0.031522, 0.031386, 
    0.031250, 0.031115, 0.030980, 0.030846, 0.030713, 0.030580, 0.030448, 0.030317, 
    0.030186, 0.030055, 0.029925, 0.029796, 0.029667, 0.029539, 0.029411, 0.029284, 
    0.029157, 0.029031, 0.028906, 0.028781, 0.028656, 0.028533, 0.028409, 0.028286, 
    0.028164, 0.028042, 0.027921, 0.027800, 0.027680, 0.027561, 0.027441, 0.027323, 
    0.027205, 0.027087, 0.026970, 0.026853, 0.026737, 0.026622, 0.026507, 0.026392, 
    0.026278, 0.026164, 0.026051, 0.025939, 0.025827, 0.025715, 0.025604, 0.025493, 
    0.025383, 0.025273, 0.025164, 0.025055, 0.024947, 0.024839, 0.024732, 0.024625, 
    0.024518, 0.024412, 0.024307, 0.024202, 0.024097, 0.023993, 0.023889, 0.023786, 
    0.023683, 0.023581, 0.023479, 0.023377, 0.023276, 0.023176, 0.023075, 0.022976, 
    0.022876, 0.022777, 0.022679, 0.022581, 0.022483, 0.022386, 0.022289, 0.022193, 
    0.022097, 0.022002, 0.021906, 0.021812, 0.021717, 0.021624, 0.021530, 0.021437, 
    0.021344, 0.021252, 0.021160, 0.021069, 0.020978, 0.020887, 0.020797, 0.020707, 
    0.020617, 0.020528, 0.020439, 0.020351, 0.020263, 0.020176, 0.020088, 0.020001, 
    0.019915, 0.019829, 0.019743, 0.019658, 0.019573, 0.019488, 0.019404, 0.019320, 
    0.019237, 0.019153, 0.019071, 0.018988, 0.018906, 0.018824, 0.018743, 0.018662, 
    0.018581, 0.018501, 0.018421, 0.018341, 0.018262, 0.018183, 0.018105, 0.018026, 
    0.017948, 0.017871, 0.017794, 0.017717, 0.017640, 0.017564, 0.017488, 0.017412, 
    0.017337, 0.017262, 0.017187, 0.017113, 0.017039, 0.016966, 0.016892, 0.016819, 
    0.016746, 0.016674, 0.016602, 0.016530, 0.016459, 0.016388, 0.016317, 0.016246, 
    0.016176, 0.016106, 0.016036, 0.015967, 0.015898, 0.015829, 0.015761, 0.015693, 
    0.015625, 
};

int8 bitshift_table[128] = 
{
    0, 7, 6, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 
    3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 
};
